package sm.pzavoli.mercato;

import sm.pzavoli.mercato.model.Acquisto;
import sm.pzavoli.mercato.model.Ticker;
import sm.pzavoli.mercato.model.db.AcquistoDAO;
import sm.pzavoli.mercato.model.db.TickerDAO;
import sm.pzavoli.std.Lista;
import sm.pzavoli.std.adapter.ObjectAdapter;
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.app.NavUtils;

public class ListaAcquisti extends ListActivity implements android.view.View.OnClickListener {
    
	private static MercatoDBOpenHelper mercatodb;
	Dialog dAcquisto = null;
	int itemPositionSelected = 0;
	Lista lsAcquisti = new Lista(Acquisto.class);
    ObjectAdapter adapterNew;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_acquisti);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        
        // 	Aggiungo il contextmenu alla lista
     	View lista = (View) getListView();
     	registerForContextMenu(lista);
     	
     	// Faccio l'adapter per la lista dei ticker visualizzata nella pagina della activity
        String[] from = new String[] {Ticker.CSZ_SIMBOLO, Ticker.CSZ_NOME,Acquisto.CSZ_DATE, 
        		Acquisto.CSZ_QUANTITY, Acquisto.CSZ_PRICE};  
        int[] to = new int[] { R.id.symbol,  R.id.nome, R.id.dataacquisto,R.id.quantita,R.id.prezzo}; 
        adapterNew = new ObjectAdapter(this, R.layout.acquisti_view_row,0,lsAcquisti, from,to);
        setListAdapter(adapterNew);
     	rileggiAcquisti();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_lista_acquisti, menu);
        return true;
    }

    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public boolean rileggiAcquisti() {
    	try {
    		MercatoDBOpenHelper db = getMercatoDB(this);
    		int id = getIntent().getIntExtra(Ticker.CSZ_ID,0);
    		if ( !AcquistoDAO.leggiAcquisti(db, id, lsAcquisti)) {
    			Log.e("MainActivity","Errore in lettura acquisti.");
    			return false;
    		}
    		String nome = getIntent().getStringExtra(Ticker.CSZ_NOME);
    		String simbolo = getIntent().getStringExtra(Ticker.CSZ_SIMBOLO);
            for(int i = 0; i < lsAcquisti.size(); i++){
            	Acquisto t = (Acquisto) lsAcquisti.get(i);
            	t.getAttributi().get(Ticker.CSZ_NOME.toLowerCase()).setValue(nome);
            	t.getAttributi().get(Ticker.CSZ_SIMBOLO.toLowerCase()).setValue(simbolo);
            }  
            ((ObjectAdapter)getListAdapter()).notifyDataSetChanged();
    		return true;
    	} catch(Exception e) {
    		Log.e(this.getClass().getName(), "Errore in lettura acquisti dal db."+e.getMessage());
    		return false;
    	}
    }
    
    @Override  
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {   
    	super.onCreateContextMenu(menu, v, menuInfo);   
    	menu.setHeaderTitle("Context Menu");   
    	menu.add(0, 0, 0, "Modifica acquisto");    
    	menu.add(0, 1, 0, "Elimina acquisto");   
    }  
    
    @Override
	public boolean onContextItemSelected(MenuItem item) {
       	if(item.getTitle().toString().equalsIgnoreCase("Modifica acquisto")) {
       		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();     
       		itemPositionSelected = info.position;        		       		
       		showEditDialog();
       	} 
       	if(item.getTitle().toString().equalsIgnoreCase("Elimina acquisto")) {
       		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();     
       		itemPositionSelected = info.position;        	
    		ObjectAdapter ada = (ObjectAdapter)getListAdapter();
			Acquisto a = (Acquisto) ada.getItem(itemPositionSelected);
			if ( AcquistoDAO.delete(getMercatoDB(this), a,null)) {
				itemPositionSelected = 0;
				Toast.makeText(this, "Eliminazione effettuata correttamente", Toast.LENGTH_LONG).show();
				ada.notifyDataSetChanged();				
			} else {
				Toast.makeText(this, "Non sono riuscito a eliminare l'acquisto", Toast.LENGTH_LONG).show();
			}
       	} 
       	return true;
	}
    
	private void showEditDialog() {          
		dAcquisto = new Dialog(this);
		dAcquisto.setContentView(R.layout.form_acquisto);
		Button bt = (Button) dAcquisto.findViewById(R.id.ButtonConfermaAcquisto);
		TextView tprezzo = (TextView) dAcquisto.findViewById(R.id.EditTextPrezzo);
		TextView tquantita = (TextView) dAcquisto.findViewById(R.id.EditTextQuantita);
		ObjectAdapter ada = (ObjectAdapter)getListAdapter();
		Acquisto a = (Acquisto) ada.getItem(itemPositionSelected);
		tprezzo.setText(""+a.getPrice());
		tquantita.setText(""+a.getQuantity());
		bt.setOnClickListener(this);		
		dAcquisto.show();
	}
    
	/*
	 * Richiamato quando l'utente conferma il Dialog dell'acquisto Azioni 
	 */
	@Override
	public void onClick(View v) {
		Log.i("MainActivity","cliccato su salvaAcquisto");
        EditText txQuantita = (EditText) ((LinearLayout)v.getParent()).findViewById(R.id.EditTextQuantita);
        EditText txPrezzo = (EditText) ((LinearLayout)v.getParent()).findViewById(R.id.EditTextPrezzo);
        int quantita = 0;
        double prezzo = 0.0;
		if ( txQuantita != null)
			quantita = Integer.parseInt(txQuantita.getText().toString());
		if ( txPrezzo != null)
			prezzo = Double.parseDouble(txPrezzo.getText().toString().replace(',','.'));
		ObjectAdapter ada = (ObjectAdapter)getListAdapter();
		if ( itemPositionSelected < ada.getCount()) {
			Acquisto a = (Acquisto) ada.getItem(itemPositionSelected);
			a.setPrice(prezzo);
			a.setQuantity(quantita);
			if ( AcquistoDAO.update(getMercatoDB(this), a)) {
				itemPositionSelected = 0;
				if ( dAcquisto != null) {
					dAcquisto.dismiss();
					dAcquisto = null;
				}
				Toast.makeText(this, "Modifica effettuata correttamente", Toast.LENGTH_LONG).show();
				ada.notifyDataSetChanged();
			} else {
				Toast.makeText(this, "Non sono riuscito a modifica l'acquisto", Toast.LENGTH_LONG).show();
			}
		}
	}
	
    public static MercatoDBOpenHelper getMercatoDB(Context context) {
		if (mercatodb == null) {
			mercatodb = new MercatoDBOpenHelper(context, null);			
		}
		return mercatodb;		
	}
    
	
}
